// 项目入口文件，通过express构建web应用
// 路由器（路由模块）的使用

// 1. 导入模块（express框架）
const express = require("express");
// 导入自定义的路由器模块文件
const userRouter = require("./routes/user");
const productRouter = require("./routes/product");

// 2. 创建一个express的app应用
const app = express();

// 配置静态访问资源
// 使用内置中间件，将public目录直击暴露在外面，可以直接方法
//app.use(express.static("public")); // 没有配置访问前缀
app.use("/static", express.static("public")); // 配置访问前缀

app.get("/images/pic01.jpg", (req,res) =>{
    res.send("ok");
});

// 写在app.js应用入口文件中中间件为应用级中间件
// 使用一个中间件(应用级中间件)
app.use("/", (req,res,next) => {
//app.use("/user", (req,res,next) => {
    console.log("请求地址：",req.url);
    next();
});
// app.get(/^\//, (req,res,next) => {
//     console.log("请求地址2：",req.url);
//     next();
// });

// 3. 使用导入的自定义路由器
// app.use(userRouter); // 没有使用前缀
app.use("/user", userRouter); // 带 /user 访问前缀
app.use("/product", productRouter); // 带 /product 访问前缀


// 4. 添加监听端口，并启动服务
app.listen(3000, ()=>{
    console.log("服务已启动，端口：3000");
});


// 为当前项目添加一个错误处理中间件
// 当项目代码运行出现错误时会自定触发下面的中间件
app.use((err, req,res, next) => {
    console.log(err);
    require("fs").appendFileSync(__dirname+"/log/error.log",err.stack);
    res.status(200).send("服务器很忙，稍后再试！");
});